package controller

import (
	"github.com/gin-gonic/gin"
	"log"
	"strconv"
	"websocket/commom"
	"websocket/dto"
	"websocket/model"
	"websocket/response"
	"websocket/util"
)

//获取用户的聊天列表
func MessageList(c *gin.Context) {
	holdUserId := c.Query("hold_user_id")
	holdUser, _ := strconv.Atoi(holdUserId)
	db := commom.GetDB()
	//r := commom.GetRedis()
	message := commom.GetMongoDB("message")          //连接mongodb的message表
	messageItem := commom.GetMongoDB("message_item") //连接mongodb的message_item表
	json := model.Message{
		HoldUserId: holdUser,
	}
	//objectUserId := json.ObjectUserId
	//获取聊天列表
	messageInfo, err := json.SelectMessageUserIdList(message)
	if err != nil {
		response.FailWithServerError("获取聊天列表失败", c)
		log.Printf("token generate error : %v", err)
		return
	}
	var messageListDto []dto.MessageList
	for _, value := range messageInfo {
		var messageItem1 model.MessageItem
		var messageList dto.MessageList
		messageItem1.To = value.ObjectUserId
		messageItem1.From = value.HoldUserId
		//查询最新聊天信息
		info := messageItem1.SelectNewMessageItem(messageItem)
		if info.From == holdUser {
			//如果是查登录者的 默认为1已读
			messageList.IsRead = 1
		} else {
			messageList.IsRead = info.IsRead
		}
		user, err := model.GetToken(db, value.ObjectUserId)
		if err != nil {
			response.FailWithMessage("查询用户信息失败", c)
			log.Printf("token generate error : %v", err)
			return
		}
		messageList.ObjectUserName = user.UserName
		messageList.ObjectUserImage = user.Image
		messageList.ObjectUserId = user.Id
		messageList.OnlineStatus = user.IsOnline
		messageList.NewAt = info.ToTime
		messageList.Msg = info.Message
		messageListDto = append(messageListDto, messageList)
	}
	response.OkWithData(gin.H{"messageListDto": messageListDto}, c)
}

//获取用户与对象的聊天记录
func MessageItemList(c *gin.Context) {
	holdUserId := c.Query("hold_user_id")
	holdUser, _ := strconv.Atoi(holdUserId)
	objectUserId := c.Query("object_user_id")
	objectUser, _ := strconv.Atoi(objectUserId)
	json := dto.MsgDto{
		HoldUserId:   holdUser,
		ObjectUserId: objectUser,
	}
	db := commom.GetDB()
	//r := commom.GetRedis()
	//message := commom.GetMongoDB("message")          //连接mongodb的message表
	messageItem := commom.GetMongoDB("message_item") //连接mongodb的message_item表
	var messageItem1 model.MessageItem
	var userMsg dto.UserMessage
	messageItem1.From = json.HoldUserId
	messageItem1.To = json.ObjectUserId
	holdUser1, err := model.GetToken(db, json.HoldUserId)
	if err != nil {
		response.FailWithMessage("查询用户信息失败1", c)
		log.Printf("message generate error : %v", err)
		return
	}
	objectUser1, err := model.GetToken(db, json.ObjectUserId)
	if err != nil {
		response.FailWithMessage("查询用户信息失败2", c)
		log.Printf("message generate error : %v", err)
		return
	}
	userMsg.HoldUserName = holdUser1.UserName
	userMsg.HoldUserImage = holdUser1.Image
	userMsg.ObjectUserName = objectUser1.UserName
	userMsg.ObjectUserImage = objectUser1.Image
	list, total, err1, err2 := messageItem1.SelectMessageItemUserIdList(messageItem, json.Page, json.PageSize)
	if err1 != nil || err2 != nil {
		response.FailWithServerError("查询用户信息失败", c)
		log.Printf("token generate error : %v", err)
		return
	}
	util.SortItems(list, "ToTime")
	userMsg.Total = total
	userMsg.PageSize = json.PageSize
	userMsg.Page = json.Page
	var msgList []dto.MessageItemList
	for _, value := range list {
		var msg dto.MessageItemList
		msg.Msg = value.Message
		msg.ToTime = value.ToTime
		msg.ObjectUserId = value.To
		msg.HoldUserId = value.From
		msg.IsRead = value.IsRead
		msgList = append(msgList, msg)
	}
	userMsg.MsgList = msgList
	response.OkWithData(gin.H{"userMsg": userMsg}, c)
}
